package pe.gob.osce.sirenas.dao.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import pe.gob.osce.sirenas.dao.IncidenciasDAOLocal;
import pe.gob.osce.sirenas.dao.convert.IncidenciasConvert;
import pe.gob.osce.sirenas.model.AcreditacionDTO;
import pe.gob.osce.sirenas.model.IncidenciasDTO;
import pe.gob.osce.sirenas.model.jpa.Incidencias;
import pe.gob.osce.sirenas.util.ConstanteEJB;
import pe.gob.osce.sirenas.util.ModeloException;

@Stateless
public class IncidenciasDAOImpl implements IncidenciasDAOLocal {

	@PersistenceContext(unitName="pe.gob.osce.sirenas.be.pu" )
	private	EntityManager	em;

	ResourceBundle propSirenas = ResourceBundle.getBundle(ConstanteEJB.PROPERTIES);
	@Override 
	public List<IncidenciasDTO> listarIncidencias(Long idFicha) throws Exception{

		List<IncidenciasDTO> listIncidenciasDTO=null;
		List<Incidencias> listaIncidenciasJPA=null;
		try{
			StringBuilder  	jpql= new StringBuilder();
						
			jpql.append("SELECT inc FROM Incidencias inc  WHERE inc.idFicha = :idFicha AND inc.estado=1 ORDER BY inc.auditoria.fechaRegistro DESC");
			Query	query= em.createQuery( jpql.toString() );
			query.setParameter("idFicha", idFicha);

			List<Incidencias>	listaObjeto= query.getResultList();
			
			if(!listaObjeto.isEmpty()) {
				listaIncidenciasJPA=new ArrayList<Incidencias>();
				for (Incidencias obj: listaObjeto) {					
					listaIncidenciasJPA.add(obj);
				}
				listIncidenciasDTO=IncidenciasConvert.createListaIncidenciasDTO(listaIncidenciasJPA);
			}
			
		} catch (NoResultException nre) {
			listIncidenciasDTO=null;
			 throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_NO_DATA));
		}catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB), e);
		}
		return listIncidenciasDTO;
	}
	
	@Override
	public Incidencias insertIncidencia(Incidencias incidencia)throws Exception {
		try{
			incidencia=em.merge(incidencia);
			em.flush();
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_NO_INSERT), e);
		}
		return incidencia;
	}
}
